/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package xmlaufgabe8;

import java.awt.Dimension;
import javax.swing.JTextPane;
import javax.swing.text.BadLocationException;
import javax.swing.text.Style;
import javax.swing.text.StyleConstants;
import javax.swing.text.StyleContext;
import javax.swing.text.StyledDocument;

/**
 * Klasse zur formatierten Ausgabe von im SimpleTextFormat formatierten Text.
 * 
 * 
 * @author s0527676
 */
public class TextDisplay extends JTextPane {
    /**
     * Speichert das StyledDocument
     */
    private StyledDocument doc;
    
    /**
     * Initialisiert Felder und setzt Anzeigeoptionen.
     * 
     */
    public TextDisplay() {
        this.setEditable(false);
        this.setPreferredSize(new Dimension(500, 500));
        doc = this.getStyledDocument();
        addStyles();
    }
    
    /**
     * Definiert Stile zur Ausgabe des Texts.
     */
    private void addStyles() {
        Style def = StyleContext.getDefaultStyleContext().getStyle(StyleContext.DEFAULT_STYLE);
        
        Style regular = doc.addStyle("regular", def);
        StyleConstants.setFontFamily(def, "SansSerif");
        
        Style s = doc.addStyle("header", regular);
        StyleConstants.setFontSize(s, 22);
        StyleConstants.setSpaceBelow(s, 5);
        StyleConstants.setSpaceAbove(s, 5);
        
        s = doc.addStyle("normal", regular);
        StyleConstants.setFontSize(s, 12);
        StyleConstants.setSpaceBelow(s, 5);
        
        s = doc.addStyle("item", regular);
        StyleConstants.setLeftIndent(s, 20);
        StyleConstants.setSpaceBelow(s, 5);
    }
    
    /**
     * Fuegt dem Display eine formatierte Ueberschrift hinzu.
     * 
     * @param text Hinzuzufuegende Ueberschrift
     * @throws BadLocationException 
     */
    public void addHeader(String text) throws BadLocationException {
        doc.setLogicalStyle(doc.getLength(), doc.getStyle("header"));
        doc.insertString(doc.getLength(), text, doc.getStyle("header"));
    }
    
    /**
     * Fuegt dem Display einen formatierten Absatz hinzu.
     * 
     * @param text Hinzuzufuegender Absatz
     * @throws BadLocationException 
     */
    public void addParagraph(String text) throws BadLocationException {
        doc.setLogicalStyle(doc.getLength(), doc.getStyle("normal"));
        doc.insertString(doc.getLength(), text, doc.getStyle("normal"));
    }
    
    /**
     * Fuegt dem Display ein formatiertes Listenelement hinzu.
     * 
     * @param text Hinzuzufuegendes Listenelement
     * @throws BadLocationException 
     */
    public void addItem(String text) throws BadLocationException {
        doc.setLogicalStyle(doc.getLength(), doc.getStyle("item"));
        doc.insertString(doc.getLength(), text, doc.getStyle("item"));
    }
}
